home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1994-04-20 | 4.7 KB | 171 lines | [TEXT/MEDT] |
- DEFINITION MODULE Thread;
- (*
- File: Threads.DEF
-
- Contains: External Interface to Thread Manager 1.2
-
- Copyright: © 1991-1993 by Apple Computer, Inc., all rights reserved.
- Adapted by: jth 1994
-
- *)
-
-
- (* Thread Gestalt Selectors *)
- CONST
- gestaltThreadMgrAttr = 'thds'; (* Thread Manager attributes *)
- gestaltThreadMgrPresent = 0; (* bit true if Thread Mgr is present *)
- gestaltSpecificMatchSupport = 1; (* bit true if Thread Mgr supports exact match creation option *)
-
- (* Thread states *)
- TYPE
- ThreadState = INTEGER;
-
- CONST
- kReadyThreadState = 0;
- kStoppedThreadState = 1;
- kRunningThreadState = 2;
-
- (* Thread environment characteristics *)
- TYPE
- ThreadTaskRef (* = Ptr*);
-
- (* Thread characteristics *)
- TYPE
- ThreadStyle = LONGINT;
-
- CONST
- kCooperativeThread = 1D;
- kPreemptiveThread = 2D;
-
- (* Thread identifiers *)
- TYPE
- ThreadID = LONGINT;
-
- CONST
- kNoThreadID = 0D;
- kCurrentThreadID = 1D;
- kApplicationThreadID = 2D;
-
- (* Options when creating a thread *)
- TYPE
- ThreadOptions = LONGINT;
-
- CONST
- kNewSuspend = 1D;
- kUsePremadeThread = 2D;
- kCreateIfNeeded = 4D;
- kFPUNotNeeded = 8D;
- kExactMatchThread = 16D;
-
- (* Information supplied to the custom scheduler *)
- TYPE
- SchedulerInfoRecPtr = POINTER TO SchedulerInfoRec;
- SchedulerInfoRec = RECORD
- InfoRecSize: LONGINT;
- CurrentThreadID: ThreadID;
- SuggestedThreadID: ThreadID;
- InterruptedCoopThreadID: ThreadID;
- END;
-
- (* Routine proc prototypes *)
- TYPE
- (* Prototype for a thread's entry routine *)
- ThreadEntryProcPtr = PROCEDURE(LONGINT): LONGINT;
-
- (* Prototype for a custom scheduler *)
- ThreadSchedulerProcPtr = PROCEDURE(SchedulerInfoRec): ThreadID;
-
- (* Prototype for a custom switcher *)
- ThreadSwitchProcPtr = PROCEDURE(ThreadID, LONGINT);
-
- (* Prototype for a custom termination notification routine*)
- ThreadTerminationProcPtr = PROCEDURE( ThreadID, LONGINT);
-
- (* Prototypes for debugger new, dispose & schedule thread notification *)
- DebuggerNewThreadProcPtr = PROCEDURE( ThreadID);
- DebuggerDisposeThreadProcPtr = PROCEDURE( ThreadID);
- DebuggerThreadSchedulerProcPtr = PROCEDURE( SchedulerInfoRec): ThreadID;
-
-
- (* Errors *)
- CONST
- threadTooManyReqsErr = -617;
- threadNotFoundErr = -618;
- threadProtocolErr = -619;
-
- TYPE
- Size = LONGINT; (* From Memory.p (MPW) size of a block in bytes *)
- OSErr = INTEGER; (* From Types.p (MPW) error code *)
- LongIntPtr = POINTER TO LONGINT; (* From Types.p (MPW) *)
-
- (* Thread Manager routines *)
- PROCEDURE CreateThreadPool(threadStyle: ThreadStyle; numToCreate: INTEGER; stackSize: Size):OSErr;
-
-
- PROCEDURE GetFreeThreadCount(threadStyle: ThreadStyle; VAR freeCount: INTEGER):OSErr;
-
-
- PROCEDURE GetSpecificFreeThreadCount ( threadStyle: ThreadStyle; stackSize: Size; VAR freeCount: INTEGER):OSErr;
-
-
- PROCEDURE GetDefaultThreadStackSize(threadStyle: ThreadStyle; VAR stackSize: Size):OSErr;
-
-
- PROCEDURE ThreadCurrentStackSpace(thread: ThreadID; VAR freeStack: LONGINT):OSErr;
-
-
- PROCEDURE NewThread(threadStyle: ThreadStyle; threadEntry: ThreadEntryProcPtr; threadParam: LONGINT; stackSize: Size; options: ThreadOptions; threadResult: LongIntPtr; VAR threadMade: ThreadID):OSErr;
-
-
- PROCEDURE DisposeThread(threadToDump: ThreadID; threadResult: LONGINT; recycleThread: BOOLEAN):OSErr;
-
-
- PROCEDURE YieldToThread(suggestedThread: ThreadID):OSErr;
-
-
- PROCEDURE YieldToAnyThread():OSErr;
-
-
- PROCEDURE GetCurrentThread(VAR currentThreadID: ThreadID):OSErr;
-
-
- PROCEDURE GetThreadState(threadToGet: ThreadID; VAR threadState: ThreadState):OSErr;
-
-
- PROCEDURE SetThreadState(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID):OSErr;
-
-
- PROCEDURE SetThreadStateEndCritical(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID):OSErr;
-
-
- PROCEDURE SetThreadScheduler(threadScheduler: ThreadSchedulerProcPtr):OSErr;
-
-
- PROCEDURE SetThreadSwitcher(thread: ThreadID; threadSwitcher: ThreadSwitchProcPtr; switchProcParam: LONGINT; inOrOut: BOOLEAN):OSErr;
-
-
- PROCEDURE SetThreadTerminator(thread: ThreadID; threadTerminator: ThreadTerminationProcPtr; terminationProcParam: LONGINT):OSErr;
-
-
- PROCEDURE ThreadBeginCritical():OSErr;
-
-
- PROCEDURE ThreadEndCritical():OSErr;
-
-
- PROCEDURE SetDebuggerNotificationProcs ( notifyNewThread: DebuggerNewThreadProcPtr;
- notifyDisposeThread: DebuggerDisposeThreadProcPtr;
- notifyThreadScheduler: DebuggerThreadSchedulerProcPtr ):OSErr;
-
-
- PROCEDURE GetThreadCurrentTaskRef ( VAR threadTRef: ThreadTaskRef ):OSErr;
-
-
- PROCEDURE GetThreadStateGivenTaskRef ( threadTRef: ThreadTaskRef; threadToGet: ThreadID; VAR threadState: ThreadState ):OSErr;
-
-
- PROCEDURE SetThreadReadyGivenTaskRef ( threadTRef: ThreadTaskRef; threadToSet: ThreadID ):OSErr;
-
- PROCEDURE ThreadsAvailable( ) : BOOLEAN;
-
- END Thread.